package br.com.salao.dao;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import br.com.salao.bean.Estado;
import br.com.salao.util.JpaUtil;


public class EstadoDaoImpl implements EstadoDao{
	
	private final GenericDao<Estado> dao;

	public EstadoDaoImpl(EntityManager em) {
		dao = new GenericDao<Estado>(em, Estado.class);
	}
	
	public boolean inserir(Estado estado) {
		dao.salvar(estado);
		return true;
	}
	
	public List<Estado> listar(){		
		return dao.lista();
	}		

	public Estado update(Estado estado){
		return dao.update(estado);
	}	
	
	public Estado buscar(int id){
		return dao.buscar(id);
		
	}

	public Estado localizarEstadoById(Estado estado){
		
		EntityManager em = JpaUtil.getEntityManager();

		Estado estadoBD = null;

		try {		
			Query query = em.createQuery("from Estado e where e.id like :idEstado");
			query.setParameter("idEstado", estado.getId());
			estadoBD = (Estado) query.getSingleResult();	
			
		} catch (Exception e) {
			e.printStackTrace();

		} finally{
			if(em != null){
				em.close();
			}
		}
		return estadoBD;
	}
	

	@SuppressWarnings("unchecked")
	public List<Estado> localizarEstadoByIdPais(int idPais){

		EntityManager em = JpaUtil.getEntityManager();

		List<Estado> estados = null;

		try {

			Query query = em.createQuery("from Estado e where e.pais.id = :idPais");
			query.setParameter("idPais", idPais);
			estados = (List<Estado>) query.getResultList();			

		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			if(em != null){
				em.close();
			}
		}
		return estados;
	}
	
	@SuppressWarnings("unchecked")
	public List<Estado> localizarEstadoByIdPais(String nomePais){

		EntityManager em = JpaUtil.getEntityManager();

		List<Estado> estados = null;

		try {

			Query query = em.createQuery("from Estado e where e.pais.nome = :nomePais");
			query.setParameter("nomePais", nomePais);
			estados = (List<Estado>) query.getResultList();			

		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			if(em != null){
				em.close();
			}
		}
		return estados;
	}


}
